Importing the required library.

library(tidyverse)
library(plotly)
library(sf) # For spatial data
library(ggplot2)

Loading the data from the data directory and reading it through the imported library.

Visualization 1 - Linear Model: Total Births Over Seasons ( Revised - added seasons )

birth_data_url <- "../data/us_births_00_14.csv"
births <- read.csv(birth_data_url, stringsAsFactors = FALSE)

filtering data to create plot

monthly_births <- births %>%
  group_by(year, month) %>%
  summarize(total_births = sum(births), .groups = 'drop') %>%
    mutate(date = as.Date(paste(year, month, "01", sep = "-")),
         month_name = format(date, "%B"))

# Adding a season column to the data
monthly_births <- monthly_births %>%
  mutate(season = case_when(
    month %in% 3:5 ~ "Spring",
    month %in% 6:8 ~ "Summer",
    month %in% 9:11 ~ "Fall",
    TRUE ~ "Winter"
  ))

generating interactive plot from the filtered data


plot_season <- plot_ly(monthly_births, x = ~year, y = ~total_births, color = ~season, type = 'scatter', mode = 'lines+markers', text = ~paste("Year:", year, "<br>Season:", season, "<br>Total Births:", total_births), hoverinfo = 'text') %>%
  layout(
    title = "Total Monthly Births in the US (2000-2014) by Seasons",
    xaxis = list(title = "Year"),
    yaxis = list(title = "Total Births")
  )
plot_season

Visualization 2 - Linear model: Predicting total births based on year ( Revised )

Linear model: Predicting total births based on year

model <- lm(total_births ~ year, data = monthly_births)

Summary of the model

summary(model)

Call:
lm(formula = total_births ~ year, data = monthly_births)

Residuals:
   Min     1Q Median     3Q    Max 
-44575 -12125     57  13426  50872 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2361462     624179   3.783 0.000211 ***
year           -1004        311  -3.230 0.001475 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 18030 on 178 degrees of freedom
Multiple R-squared:  0.05536,   Adjusted R-squared:  0.05005 
F-statistic: 10.43 on 1 and 178 DF,  p-value: 0.001475

Plot the model with ggplot2

ggplot(monthly_births, aes(x = year, y = total_births)) +
  geom_point() +
  geom_smooth(method = "lm", col = "#532D8E") +
  labs(title = "Linear Model: Total Births Over Years", x = "Year", y = "Total Births") +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'


Resonse of the feedback for this plot.

Predicting total births over the years is crucial for public health planning, educational infrastructure, and economic forecasting. It helps allocate resources efficiently, project school enrollments accurately, and prepare for future labor market demands.

By confirming the predicted values through assumptions of linearity, independence, homoscedasticity, and normality, we ensure the predictions are reliable and actionable, providing valuable insights for strategic planning and decision-making.


Visualization 3 - Lakes in Florida

Reading the shape file from the data directory

lakes <- st_read("../data/Florida_Lakes/Florida_Lakes.shp")
Reading layer `Florida_Lakes' from data source 
  `C:\Users\desdiv10\Documents\Assignments\Data Visualization\workspace\dataviz_final_project\data\Florida_Lakes\Florida_Lakes.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 4243 features and 6 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -87.42774 ymin: 25.02625 xmax: -80.03097 ymax: 31.00254
Geodetic CRS:  WGS 84

mapping lakes to the florida map using red color

ggplot() +
  geom_sf(data = lakes, fill = "red", color = "black") +
  ggtitle("Lakes in Florida") +
  theme_minimal()

LS0tDQp0aXRsZTogIkludGVyYWN0aXZlIFZpc3VhbGl6YXRpb24gb2YgVVMgTW9udGhseSBCaXJ0aCBEYXRhICgyMDAwLTIwMTQpIGFsb25nIHdpdGggcHJlZGVjdGlvbiBzY2F0dGVyIHBsb3QgJiBMYWtlcyBpbiBGbG9yaWRhIC0gU3BhdGlhbCBWaXN1bGl6YXRpb24iDQphdXRob3I6ICJEaXZ5ZXNoIERlc2FpIC0gYGRkZXNhaTc2NTZAZmxvcmlkYXBvbHkuZWR1YCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoqKioNCg0KPiBJbXBvcnRpbmcgdGhlIHJlcXVpcmVkIGxpYnJhcnkuDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc2YpICMgRm9yIHNwYXRpYWwgZGF0YQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpgYGANCg0KPiBMb2FkaW5nIHRoZSBkYXRhIGZyb20gdGhlIGRhdGEgZGlyZWN0b3J5IGFuZCByZWFkaW5nIGl0IHRocm91Z2ggdGhlIGltcG9ydGVkIGxpYnJhcnkuDQoNCiMjIyBWaXN1YWxpemF0aW9uIDEgLSBMaW5lYXIgTW9kZWw6IFRvdGFsIEJpcnRocyBPdmVyIFNlYXNvbnMgKCBSZXZpc2VkIC0gYWRkZWQgc2Vhc29ucyApDQoNCg0KYGBge3J9DQpiaXJ0aF9kYXRhX3VybCA8LSAiLi4vZGF0YS91c19iaXJ0aHNfMDBfMTQuY3N2Ig0KYmlydGhzIDwtIHJlYWQuY3N2KGJpcnRoX2RhdGFfdXJsLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQpgYGANCg0KPiBmaWx0ZXJpbmcgZGF0YSB0byBjcmVhdGUgcGxvdA0KDQpgYGB7cn0NCm1vbnRobHlfYmlydGhzIDwtIGJpcnRocyAlPiUNCiAgZ3JvdXBfYnkoeWVhciwgbW9udGgpICU+JQ0KICBzdW1tYXJpemUodG90YWxfYmlydGhzID0gc3VtKGJpcnRocyksIC5ncm91cHMgPSAnZHJvcCcpICU+JQ0KICAgIG11dGF0ZShkYXRlID0gYXMuRGF0ZShwYXN0ZSh5ZWFyLCBtb250aCwgIjAxIiwgc2VwID0gIi0iKSksDQogICAgICAgICBtb250aF9uYW1lID0gZm9ybWF0KGRhdGUsICIlQiIpKQ0KDQojIEFkZGluZyBhIHNlYXNvbiBjb2x1bW4gdG8gdGhlIGRhdGENCm1vbnRobHlfYmlydGhzIDwtIG1vbnRobHlfYmlydGhzICU+JQ0KICBtdXRhdGUoc2Vhc29uID0gY2FzZV93aGVuKA0KICAgIG1vbnRoICVpbiUgMzo1IH4gIlNwcmluZyIsDQogICAgbW9udGggJWluJSA2OjggfiAiU3VtbWVyIiwNCiAgICBtb250aCAlaW4lIDk6MTEgfiAiRmFsbCIsDQogICAgVFJVRSB+ICJXaW50ZXIiDQogICkpDQoNCmBgYA0KDQoNCg0KPiBnZW5lcmF0aW5nIGludGVyYWN0aXZlIHBsb3QgZnJvbSB0aGUgZmlsdGVyZWQgZGF0YQ0KDQpgYGB7cn0NCg0KcGxvdF9zZWFzb24gPC0gcGxvdF9seShtb250aGx5X2JpcnRocywgeCA9IH55ZWFyLCB5ID0gfnRvdGFsX2JpcnRocywgY29sb3IgPSB+c2Vhc29uLCB0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ2xpbmVzK21hcmtlcnMnLCB0ZXh0ID0gfnBhc3RlKCJZZWFyOiIsIHllYXIsICI8YnI+U2Vhc29uOiIsIHNlYXNvbiwgIjxicj5Ub3RhbCBCaXJ0aHM6IiwgdG90YWxfYmlydGhzKSwgaG92ZXJpbmZvID0gJ3RleHQnKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlRvdGFsIE1vbnRobHkgQmlydGhzIGluIHRoZSBVUyAoMjAwMC0yMDE0KSBieSBTZWFzb25zIiwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiWWVhciIpLA0KICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJUb3RhbCBCaXJ0aHMiKQ0KICApDQpwbG90X3NlYXNvbg0KYGBgDQoNCiMjIyBWaXN1YWxpemF0aW9uIDIgLSBMaW5lYXIgbW9kZWw6IFByZWRpY3RpbmcgdG90YWwgYmlydGhzIGJhc2VkIG9uIHllYXIgKCBSZXZpc2VkICkNCg0KDQo+IExpbmVhciBtb2RlbDogUHJlZGljdGluZyB0b3RhbCBiaXJ0aHMgYmFzZWQgb24geWVhcg0KDQoNCmBgYHtyfQ0KbW9kZWwgPC0gbG0odG90YWxfYmlydGhzIH4geWVhciwgZGF0YSA9IG1vbnRobHlfYmlydGhzKQ0KYGBgDQoNCg0KPiBTdW1tYXJ5IG9mIHRoZSBtb2RlbA0KDQpgYGB7cn0NCnN1bW1hcnkobW9kZWwpDQpgYGANCg0KDQo+IFBsb3QgdGhlIG1vZGVsIHdpdGggZ2dwbG90Mg0KDQpgYGB7cn0NCmdncGxvdChtb250aGx5X2JpcnRocywgYWVzKHggPSB5ZWFyLCB5ID0gdG90YWxfYmlydGhzKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2wgPSAiIzUzMkQ4RSIpICsNCiAgbGFicyh0aXRsZSA9ICJMaW5lYXIgTW9kZWw6IFRvdGFsIEJpcnRocyBPdmVyIFllYXJzIiwgeCA9ICJZZWFyIiwgeSA9ICJUb3RhbCBCaXJ0aHMiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoqKiogDQoNCg0KIyMjIyBSZXNvbnNlIG9mIHRoZSBmZWVkYmFjayBmb3IgdGhpcyBwbG90Lg0KDQpfUHJlZGljdGluZyB0b3RhbCBiaXJ0aHMgb3ZlciB0aGUgeWVhcnMgaXMgY3J1Y2lhbCBmb3IgcHVibGljIGhlYWx0aCBwbGFubmluZywgZWR1Y2F0aW9uYWwgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBlY29ub21pYyBmb3JlY2FzdGluZy4gSXQgaGVscHMgYWxsb2NhdGUgcmVzb3VyY2VzIGVmZmljaWVudGx5LCBwcm9qZWN0IHNjaG9vbCBlbnJvbGxtZW50cyBhY2N1cmF0ZWx5LCBhbmQgcHJlcGFyZSBmb3IgZnV0dXJlIGxhYm9yIG1hcmtldCBkZW1hbmRzLl8gIA0KDQpfQnkgY29uZmlybWluZyB0aGUgcHJlZGljdGVkIHZhbHVlcyB0aHJvdWdoIGFzc3VtcHRpb25zIG9mIGxpbmVhcml0eSwgaW5kZXBlbmRlbmNlLCBob21vc2NlZGFzdGljaXR5LCBhbmQgbm9ybWFsaXR5LCB3ZSBlbnN1cmUgdGhlIHByZWRpY3Rpb25zIGFyZSByZWxpYWJsZSBhbmQgYWN0aW9uYWJsZSwgcHJvdmlkaW5nIHZhbHVhYmxlIGluc2lnaHRzIGZvciBzdHJhdGVnaWMgcGxhbm5pbmcgYW5kIGRlY2lzaW9uLW1ha2luZy5fICANCg0KDQoqKioNCg0KIyMjIFZpc3VhbGl6YXRpb24gMyAtIExha2VzIGluIEZsb3JpZGENCg0KDQo+IFJlYWRpbmcgdGhlIHNoYXBlIGZpbGUgZnJvbSB0aGUgZGF0YSBkaXJlY3RvcnkNCg0KYGBge3J9DQpsYWtlcyA8LSBzdF9yZWFkKCIuLi9kYXRhL0Zsb3JpZGFfTGFrZXMvRmxvcmlkYV9MYWtlcy5zaHAiKQ0KYGBgDQoNCj4gbWFwcGluZyBsYWtlcyB0byB0aGUgZmxvcmlkYSBtYXAgdXNpbmcgcmVkIGNvbG9yDQoNCmBgYHtyfQ0KZ2dwbG90KCkgKw0KICBnZW9tX3NmKGRhdGEgPSBsYWtlcywgZmlsbCA9ICJyZWQiLCBjb2xvciA9ICJibGFjayIpICsNCiAgZ2d0aXRsZSgiTGFrZXMgaW4gRmxvcmlkYSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGA=